#!/bin/zsh

# 记录脚本开始时间
SCRIPT_START_TIME=$(date +%s)
echo "脚本开始时间: $(date '+%Y-%m-%d %H:%M:%S')"

# 解析命令行参数
MUSTRUN="false"
SKIP_RAILS="false"

# 显示使用说明
show_usage() {
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  -r, --rerun          强制执行所有任务（包括Rails初始化）"
    echo "  -s, --skip-rails     跳过Rails初始化任务（智能检测，默认行为）"
    echo "  -h, --help           显示此帮助信息"
    echo ""
    echo "智能逻辑说明:"
    echo "  - 默认情况下，脚本会智能检测Rails gems是否已安装"
    echo "  - 如果gems已存在，自动跳过bundle install以提升构建速度"
    echo "  - 如果gems不存在，自动运行bundle install确保环境完整"
    echo "  - 使用 -r 选项可强制重新安装所有gems"
    echo "  - 智能模式下会保留已安装的gems和构建缓存，最大化构建速度"
    echo ""
    echo "示例:"
    echo "  $0                    # 默认：智能检测，跳过已存在的gems"
    echo "  $0 -r                 # 强制执行所有任务，重新安装gems"
    echo "  $0 --rerun            # 强制执行所有任务，重新安装gems"
    echo "  $0 -s                 # 智能检测模式（与默认行为相同）"
    echo "  $0 --skip-rails       # 智能检测模式（与默认行为相同）"
    echo ""
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -r|--rerun)
            MUSTRUN="true"
            SKIP_RAILS="false"
            shift
            ;;
        -s|--skip-rails)
            MUSTRUN="false"
            SKIP_RAILS="true"
            shift
            ;;
        -h|--help)
            show_usage
            exit 0
            ;;
        *)
            echo "错误: 未知参数 $1"
            show_usage
            exit 1
            ;;
    esac
done

# 显示当前配置
if [ "$MUSTRUN" = "true" ]; then
    echo "配置: 强制执行所有任务（包括Rails gems重新安装）"
    echo "  - 将重新运行 bundle install，即使gems已存在"
    echo "  - 适用于：首次构建、依赖更新、环境重置等场景"
    export MUSTRUN=true
else
    echo "配置: 智能检测模式（推荐用于日常开发）"
    echo "  - 自动检测Rails gems是否已安装"
    echo "  - 如果gems存在：跳过bundle install，大幅提升构建速度"
    echo "  - 如果gems不存在：自动运行bundle install确保环境完整"
    echo "  - 保留所有构建缓存，最大化构建性能"
    echo "  - 适用于：日常构建、增量开发等场景"
    unset MUSTRUN
fi

echo ""

# Load nvm if it exists
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

nvm use
unset GEM_HOME GEM_PATH

# 执行Gradle构建
echo "开始执行Gradle构建..."

# 确定脚本所在目录和gradlew文件位置
# 使用最可靠的方法获取脚本所在目录 - 无论脚本如何被执行都能获取正确路径
if [ "$0" = "-bash" ] || [ "$0" = "bash" ] || [ "$0" = "sh" ] || [ -z "$0" ]; then
    # 脚本被source执行或通过其他方式调用
    SCRIPT_DIR="$(cd "$(dirname "$BASH_SOURCE[0]")" && pwd)"
else
    # 正常执行脚本
    SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
fi

# 构建gradlew的正确路径 - 脚本位于development-utility目录，gradlew位于项目根目录
GRADLEW="$SCRIPT_DIR/../gradlew"

# 调试信息
if [ -n "$DEBUG" ]; then
    echo "调试信息:"
    echo "- 脚本路径(\$0): $0"
    echo "- 脚本目录(SCRIPT_DIR): $SCRIPT_DIR"
    echo "- gradlew路径(GRADLEW): $GRADLEW"
    echo "- 当前工作目录: $(pwd)"
    echo "- BASH_SOURCE[0]: $BASH_SOURCE"
fi

# 检查gradlew文件是否存在并可执行
if [ -f "$GRADLEW" ] && [ -x "$GRADLEW" ]; then
    echo "找到可执行的gradlew文件"
    CLEAN_BUILD_ARGS=("clean" "serverGenericZip" "--rerun-tasks")
    BUILD_ARGS=("serverGenericZip" "--rerun-tasks")
else
    echo "错误: 找不到可执行的gradlew文件!"
    echo "预期路径: $GRADLEW"
    echo "脚本目录: $SCRIPT_DIR"
    echo "当前工作目录: $(pwd)"
    echo "尝试列出development-utility目录内容:"
    ls -la "$SCRIPT_DIR"
    echo "尝试列出项目根目录内容:"
    ls -la "$SCRIPT_DIR/.."
    exit 1
fi
echo "构建策略: ${MUSTRUN:-"智能检测"}"
echo ""
# 执行构建命令
if [ "$MUSTRUN" = "true" ]; then
    echo "执行命令: $GRADLEW ${CLEAN_BUILD_ARGS[*]}"
    "$GRADLEW" "${CLEAN_BUILD_ARGS[@]}"
else
    echo "执行命令: $GRADLEW ${BUILD_ARGS[*]}"
    "$GRADLEW" "${BUILD_ARGS[@]}"
fi

# 记录脚本结束时间并计算总耗时
SCRIPT_END_TIME=$(date +%s)
SCRIPT_DURATION=$((SCRIPT_END_TIME - SCRIPT_START_TIME))
echo ""
echo "脚本结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "脚本总耗时: ${SCRIPT_DURATION} 秒 ($(($SCRIPT_DURATION / 60)) 分 $(($SCRIPT_DURATION % 60)) 秒)"
echo ""


# 清理和部署
echo ""
echo "清理临时文件, 并复制构建产物到~/tmp/, 解压并启动服务器..."
rm -rf ~/tmp/go-server-*/
rm  ~/tmp/*.zip
cp installers/target/distributions/zip/go-server-25.3.0-*.zip ~/tmp/
cd ~/tmp/

# 使用通配符匹配实际的zip文件名
ZIP_FILE=$(ls go-server-25.3.0-*.zip | head -1)
if [ -z "$ZIP_FILE" ]; then
    echo "错误: 未找到 go-server zip 文件"
    exit 1
fi

echo "找到zip文件: $ZIP_FILE"
unzip "$ZIP_FILE"

# 查找解压后的目录
SERVER_DIR=$(ls -d go-server-25.3.0 | head -1)
if [ -z "$SERVER_DIR" ]; then
    echo "错误: 未找到解压后的服务器目录"
    exit 1
fi

echo "服务器目录: $SERVER_DIR"
echo "启动服务器..."

# 检查服务器二进制文件是否存在
if [ -f "$SERVER_DIR/bin/go-server" ]; then
    echo "找到服务器二进制文件，正在启动..."
    "./$SERVER_DIR/bin/go-server" console
else
    echo "错误: 服务器二进制文件不存在: $SERVER_DIR/bin/go-server"
    echo "请检查构建是否成功完成"
    exit 1
fi


# 检查服务器是否成功启动
if [ $? -eq 0 ]; then
    echo "构建完成！服务器已启动。"
    echo "提示：下次构建时，如果Rails gems已存在，构建速度会更快。"
    echo "如需强制重新安装gems，请使用: $0 -r"
    echo "如需完全清理环境，可手动运行: gradle clean"
else
    echo "构建完成，但服务器启动失败。"
    echo "请检查错误信息并手动启动服务器："
    echo "cd ~/tmp/$SERVER_DIR && ./bin/go-server console"
    echo ""
    echo "提示：下次构建时，如果Rails gems已存在，构建速度会更快。"
    echo "如需强制重新安装gems，请使用: $0 -r"
    echo "如需完全清理环境，可手动运行: gradle clean"
fi
